package com.ruoyi.psi.sale.delivery.mapper;


import com.ruoyi.psi.base.product.domain.ProduceCheck;
import com.ruoyi.psi.sale.delivery.domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 销售出库
 * 数据层
 */
public interface SaleDeliveryMapper {
    /**
     * 销售订单出库查询
     * @param cond
     * @return
     */
    List<SaleDeliveryDto> selectSaleDeliveryList(SaleDeliveryCond cond);

    /**
     * 按编号查询
     * @param saleDeliveryId 销售订单出库编号
     * @return
     */
    SaleDeliveryDto selectSaleDeliveryById(String saleDeliveryId);

    /**
     * 根据销售订单查询销售出库记录
     * @param saleOrderId 销售订单编号
     * @return
     */
    List<SaleDeliveryDto> selectSaleDeliveryBySaleOrderId(String saleOrderId);

    /**
     * 获取最新的一条销售出库编号
     * @return
     */
    String getSaleDeliveryId();
    /**
     * 销售订单出库新增
     * @param saleDelivery
     * @return
     */
    int insertSaleDelivery(SaleDeliveryDomain saleDelivery);

    /**
     * 销售订单出库更新
     * @param saleDelivery
     * @return
     */
    int updateSaleDelivery(SaleDeliveryDomain saleDelivery);

    /**
     * 更新销售订单出库删除标志位
     * @param saleDelivery
     * @return
     */
    int updateSaleDeliveryDeleteFlag(SaleDeliveryDomain saleDelivery);

    /**
     * 更新审批状态
     * @param saleDeliveryId
     * @return
     */
    int completeApprovalFlag(String saleDeliveryId);

    /**
     * 拒绝审批状态
     * @param saleDeliveryId
     * @return
     */
    int refuseApprovalFlag(String saleDeliveryId);

    /**
     * 销售订单出库详细查询
     * @param cond
     * @return
     */
    List<SaleDeliveryListDto> selectSaleDeliveryListList(SaleDeliveryCond cond);

    /**
     * 查询销售订单出库对应的所有产品详细
     * @param saleDeliveryId 销售订单出库编号
     * @return
     */
    List<SaleDeliveryListDto> selectSaleDeliveryListListById(String saleDeliveryId);

    /**
     * 查询销售订单出库对应的指定产品详细
     * @param saleDeliveryId
     * @return
     */
    SaleDeliveryListDto  selectSaleDeliveryListById(@Param("saleDeliveryId")String saleDeliveryId, @Param("produceId")String produceId);

    /**
     * 销售订单出库详细新增
     * @param saleDeliveryList
     * @return
     */
    int insertSaleDeliveryList(SaleDeliveryListDomain saleDeliveryList);

    /**
     * 销售订单出库详细更新
     * @param saleDeliveryList
     * @return
     */
    int updateSaleDeliveryList(SaleDeliveryListDomain saleDeliveryList);

    /**
     * 删除销售订单出库详细
     * @param saleDeliveryId  销售订单出库编号
     * @param produceId 产品编号
     * @return
     */
    int deleteSaleDeliveryListById(@Param("saleDeliveryId")String saleDeliveryId, @Param("produceId")String produceId);
    /**
     * 获取指定产品销售退货数量
     * @param produceCheck
     * @return
     */
    Double getSaleDeliveryProduceNum(ProduceCheck produceCheck);
}
